package W324;

import java.util.Arrays;

/**
 *  题目 ：统计相似字符串对的数目
 *  题目详述 ：
 *  给你一个下标从 0 开始的字符串数组 words 。
 * 如果两个字符串由相同的字符组成，则认为这两个字符串 相似 。
 * 例如，"abca" 和 "cba" 相似，因为它们都由字符 'a'、'b'、'c' 组成。
 * 然而，"abacba" 和 "bcfd" 不相似，因为它们不是相同字符组成的。
 * 请你找出满足字符串 words[i] 和 words[j] 相似的下标对 (i, j) ，并返回下标对的数目，其中 0 <= i < j <= word.length - 1 。
 *
 *
 * 提示：
 *  1 <= words.length <= 100
 *  1 <= words[i].length <= 100
 *  words[i] 仅由小写英文字母组成
 */
public class Q1 {
    /**
     * 核心思想 ：
     * （1）
     * 由于words有且仅有小写英文字母组成，即使用int[26]数组来存储；
     * 若是普通情况的话，即使用hash表来记录每个字符串中所出现的字符；
     * （2）
     * 即，将字符串数组中所有字符串进行去重操作，化简为最简形式；
     * 1.去重操作 ：使用StringBuilder类中的indexOf方法（获取某个字符第一次出现位置），和LastIndexOf方法（获取某个字符最后一次出现的位置）
     * 即，若是indexOf方法和LastIndexOf方法所获取的下标一致的话，此字符不存在重复；
     * 2.排序操作 ：将去重后的字符串进行排序；
     * 3.后续直接使用字符串之间相互比较即可
     */
    public int similarPairs(String[] words) {
        // 字符串去重 + 字符串排序
        for (int k = 0 ; k < words.length ; k++) {
            StringBuilder s = new StringBuilder();
            for(int i = 0 ; i < words[i].length(); i++){
                char c = words[i].charAt(i); // 获取所需要去遍历的字符
                if(words[i].indexOf(c) == words[i].lastIndexOf(c)){
                    s.append(c);
                }
                else {
                    // 若是重复的话，有且仅将重复字符的拼接到StringBuilder上一次
                    // 即，实现将重复字符的拼接到StringBuilder上一次
                    // ===》 即，判断遍历字符串中字符下标是否是其第一次出现
                    if(words[i].indexOf(c) == i){
                        s.append(c);
                    }
                }
            }
            words[k] = s.toString();
            System.out.println(words[k]);
            // 字符串排序
            char[] unSorted = words[k].toCharArray();
            Arrays.sort(unSorted);
            words[k] = new String(unSorted);
        }
        int sum = 0 ;
        for(int i = 0 ; i < words.length ; i++){
            for(int j = i + 1; j < words.length ; j++){
//                System.out.println("是否相同 ： " + words[i].equals(words[j]));
//                if (words[i].equals(words[j])){
//                    sum++;
//                }
                System.out.println(words[i] + "  " + words[j]);
                System.out.println("是否相同 ： " + (words[i].compareTo(words[j]) == 0));
                if (words[i].compareTo(words[j]) == 0){
                    sum++;
                }
            }
        }
        return sum;
    }
}
